package com.nenude.corejava.ch12;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 2、编写一个java程序实现文件复制功能， 要求将d:/io/copysrc.doc中的内容复制到d:/io/copydes.doc中。 [必做题]
 * 
 * @author admin
 *
 */
public class FileCoryer {

	public void copy(String src, String desc) {
		File f1 = new File(src);
		File f2 = new File(desc);
		// 从f1复制到f2
		copy(f1, f2);
	}

	// 使用方法的重载对参数进行重构
	public void copy(File srcFile, File descFile) {

		// 如果原文件不存在，则不需要拷贝
		if (srcFile == null || !srcFile.exists()) {
			System.out.println("原文件不存在");
			return;
		}
		// 检查目标文件或目标目录是否存在
		if (descFile == null) {
			System.out.println("目标文件为null");
			return;
		} else {
			// 创建父级目录
			descFile.getParentFile().mkdirs();
		}

		// 输入流和输出流
		FileInputStream fileInputStream = null;
		FileOutputStream fileOutputStream = null;

		try {
			fileInputStream = new FileInputStream(srcFile);
			fileOutputStream = new FileOutputStream(descFile);

			// byte[] b = new byte[128];
			//1M
			byte[] b = new byte[1024 * 1024];
			// 把读到的数据保存到buff中，并返回实际读取内容的长度，如果文件已经读取完毕则返回-1;
			int length = fileInputStream.read(b);

			// 当length==-1时，表示文件读取完毕
			while (length != -1) {
				// 循环写入数据，直到文件写完为止；注意每次只写入读取的数据（ 0, length）
				fileOutputStream.write(b, 0, length);
				// 循环读取数据，直到文件读完为止
				length = fileInputStream.read(b);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// 关闭文件流：
			if (fileOutputStream != null) {
				try {
					fileOutputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (fileInputStream != null) {
				try {
					fileInputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}// finally end

	}

	public static void main(String[] args) {
		String src = "D:\\PowerDesigner15_Evaluation\\PowerDesigner15_Evaluation.exe";
		String desc = "D:\\copy\\PowerDesigner15_Evaluation\\PowerDesigner15_Evaluation_copy.exe";

		long start = System.currentTimeMillis();
		FileCoryer coryer = new FileCoryer();
		coryer.copy(src, desc);
		long stop = System.currentTimeMillis();

		System.out.println("拷贝时间（S）：" + ((stop - start) / 1000));
	}
}
